/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarAyudantes;

import entidad.Persona;
import entidad.ayudantias.Configuracion;
import entidad.ayudantias.Solicitudayudantia;
import entidad.ayudantias.TipoAyudantia;
import entidad.ayudantias.TipoAyudantia.TipoAyudantiaEnum;
import hero.interfaces.BnNodeValue;
import java.rmi.RemoteException;
import java.sql.Date;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.naming.NamingException;
import wasolicitudesfiec.Ayudantias.SolicitarAyudantes.ConfigurarConvocatoria;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;
import web.util.Constantes;
import web.util.SendMail;

/**
 *
 * @author kabad
 */
public class CTRL_ConfigurarConvocatoria extends CTRL_Base {

    private ConfigurarConvocatoria gui;
    private String nombreActividad = Constantes.SolicitarAyudantes.configurarConvocatoria;
    private final String nombreProceso = Constantes.Modelo.modelo_SolicitarAyudantes;
    private Solicitudayudantia solicitudAyudantia;

    public CTRL_ConfigurarConvocatoria(ConfigurarConvocatoria gui,
            FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }

    public void inicializar() throws MensajeException {
        String nombreInstancia;
        TipoAyudantia tipoAyudantia;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            int idSolicitud = Integer.parseInt(prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitudAyudantia = logica.getLogAyudantia().leerSolicitudayudantiaNivel2(idSolicitud);
            gui.getMenu().setTitulo(this.nombreProceso + "_" + idSolicitud + ": " + nombreActividad);
            tipoAyudantia = logica.leerTipoAyudantia(solicitudAyudantia);
            Persona personaProfesor = solicitudAyudantia.getProfesor().getPersona();
            gui.getDetalleSolicitarAyudantes().getStSolicitante1().setText(personaProfesor.toString());
            gui.getDetalleSolicitarAyudantes().getStTipoAyudantia1().setText(tipoAyudantia.getNombre());
            String nombreAyudantia = "";
            if (tipoAyudantia.getTipo() == TipoAyudantiaEnum.ACADEMICA) {
                nombreAyudantia = solicitudAyudantia.getMateria().getNombre();
                gui.getDetalleSolicitarAyudantes().getStNombreAyudantia1().setText(nombreAyudantia);
            } else {
                nombreAyudantia = solicitudAyudantia.getAyudantiavaria().getNombre();
                gui.getDetalleSolicitarAyudantes().getStNombreAyudantia1().setText(nombreAyudantia);
            }
            gui.getDetalleSolicitarAyudantes().getStNumHoras1().setText(solicitudAyudantia.getHorasAyudantias() + " hora(s)");
            gui.getDetalleSolicitarAyudantes().getStFechaInicio().setText(solicitudAyudantia.getFechainicioayudantia());
            gui.getDetalleSolicitarAyudantes().getStFechaFin().setText(solicitudAyudantia.getFechafinayudantia());
            if (solicitudAyudantia.getMensajeParaDecano() != null) {
                gui.getDetalleSolicitarAyudantes().getTxtaComentarios().setValue(solicitudAyudantia.getMensajeParaDecano());
            } else {
                gui.getDetalleSolicitarAyudantes().getTxtaComentarios().setValue(Constantes.Mensajes.noComentarios);
            }
            gui.getMenu().setTitulo(this.nombreProceso + "_" + idSolicitud + ": " + nombreActividad);
            gui.getDetalleSolicitarAyudantes().getTxtAActividad().setValue(solicitudAyudantia.getActividadarealizar());


        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            ex.printStackTrace();
            Logger.getLogger(CTRL_ConfigurarConvocatoria.class.getName()).log(Level.SEVERE, null, ex);
            new MensajeException(Constantes.Mensajes.noInicia);
        }
    }

    public void generarTextoConvocatoria() throws MensajeException {
        llenarDatosConvocatoria();
        gui.setTextoConvocatoria(logica.getLogAyudantia().generarConvocatoria(solicitudAyudantia));
    }

    public void llenarDatosConvocatoria() {
        this.solicitudAyudantia.setNumAyudantesHoras((String) gui.getTxtNumAyudantes().getText());
        java.util.Date fechaMaxRegistro = gui.getCalMaxRecepcionSolicitudes().getSelectedDate();
        this.solicitudAyudantia.setFechaMaxRegistro(new Date(fechaMaxRegistro.getTime()));
        this.solicitudAyudantia.setRequisitosAdicionales((String) gui.getTxtaRequerimientos().getValue());
        if (gui.getChbAdjuntarHojaVida().getValue() == null) {
            gui.getChbAdjuntarHojaVida().setValue(false);
        }
        this.solicitudAyudantia.setRequiereAdjunto((Boolean) gui.getChbAdjuntarHojaVida().getValue());
        if (solicitudAyudantia.getRequiereAdjunto()) {
            solicitudAyudantia.setTipoArchivo((String) gui.getTxtTipoArchivo().getText());
        }
    }

    public void lanzarConvocatoria() throws MensajeException {
        BnNodeValue actividad;
        String nombreInstanciaProceso;
        Solicitudayudantia solicitud2;
        try {
            llenarDatosConvocatoria();

            nombreInstanciaProceso = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstanciaProceso);
            actividad = usrSession.getNode(nombreInstanciaProceso, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt(prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud2 = logica.getLogAyudantia().guardarYClonarSolicitudAyudantia(solicitudAyudantia);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.idSolicitudActividad, solicitud2.getIdSolicitudAyudantia() + "");
            prjSession.setProperty("fechaMaxRegistro", solicitud2.getFechaMaxRegistro().getTime() + "");

            solicitudAyudantia.setRegistroHabilitado(true);
            solicitud2 = logica.getLogAyudantia().guardarYClonarSolicitudAyudantia(solicitudAyudantia);// Este es una Solicitud que se usara en "Registrar estudiantes"

            prjSession.setProperty("idTempSolicitudActividad", solicitud2.getIdSolicitudAyudantia() + "");
            usrSession.startActivity(nombreInstanciaProceso, nombreActividad);
            usrSession.terminateActivity(nombreInstanciaProceso, nombreActividad);
            //enviar correo masivo sobre la ayudantia
            Configuracion to = logica.leerConfiguracionPorNombre(Constantes.Configuracion.AdministradorCorreo.getNombreEnBD());
            String subject = "Convocatoria Ayudantía de " + gui.getDetalleSolicitarAyudantes().getStTipoAyudantia1() + " [" + gui.getDetalleSolicitarAyudantes().getStNombreAyudantia1() + "] ";
            String message = gui.getTextoConvocatoria();
            SendMail sendMail = new SendMail(to.getValor(), subject, message);
            sendMail.send();

        } catch (NamingException ex) {
            ex.printStackTrace();
            Logger.getLogger(CTRL_ConfigurarConvocatoria.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException("No se pudo conectar con el servidor de correo");
        } catch (AddressException ex) {
            ex.printStackTrace();
            Logger.getLogger(CTRL_ConfigurarConvocatoria.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException("Ocurrió un error con las direcciones de correo");
        } catch (MessagingException ex) {
            ex.printStackTrace();
            Logger.getLogger(CTRL_ConfigurarConvocatoria.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException("Ocurrió un error al transportar el mensaje");
        } catch (MensajeException exception) {
            throw exception;
        } catch (Exception exception) {
            exception.printStackTrace();
            Logger.getLogger(CTRL_VolverASolicitar.class.getName()).log(Level.SEVERE, null, exception);
            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }

    }
}
